AWS再入門 Amazon Elastic MapReduce編
はじめに
当エントリはDevelopers.IOで弊社AWSチームによる2015年アドベントカレンダー 『AWS サービス別 再入門アドベントカレンダー 2015』の8日目のエントリです。 昨日7日目のエントリは大栗の『Amazon RDS』でした。
このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。 本日8日目のテーマは『Amazon EMR』です。
Amazon Elastic MapReduce(Hadoopクラスター Amazon EMR) | アマゾン ウェブ サービス(AWS 日本語)
目次
- Amazon EMRとは
- 分散処理基盤
- 分散アプリケーション
- 伸縮自在性
- 安全性
- サービス利用のユースケース
- CloudFrontのアクセスログの集計と分析
- 機械学習によるレコメンデーションエンジンの構築
- あわせて読みたい
- さいごに
Amazon EMRとは
Amazon Elastic MapReduce (Amazon EMR) は、大量のデータを迅速、容易に、かつコスト効果よく処理するためのウェブサービスです1。具体的には分散処理基盤であるHadoopクラスタの構築と運用、およびHadoopクラスタ上での分散アプリケーションの実行を行ってくれます。
分散処理基盤
EMRはHadoopクラスタの構築と運用を行ってくれます。マネジメントコンソールでHadoopクラスタに利用するEC2インスタンスのノード数とインスタンスタイプを指定すると、10分ほどでHadoopクラスタを構築してくれます。Hadoopクラスタで構成するEC2インスタンスに異常があれば、異常のあったインスタンスは破棄して新規にインスタンスを起動してくれます。
分散アプリケーション
Hadoopクラスタ上で分散アプリケーションを実行することができます。例えばSQLライクにログデータの集計などを行いたい場合はApache Hiveを利用することができますし、対話的に処理したいのであればImpalaやPrestoを利用することもできます。機械学習ということであればApache Mahoutを実行することもできますし、汎用的な処理したいのであればApache Sparkを利用することもできます2。
EMRを利用することで前述のような分散アプリケーションを対話的に利用することもできますし、バッチジョブとして実行することもできます。バッチジョブの場合はStepという形でEMRのAPIを利用することでジョブの登録と実行を行うことができるようになっています。
伸縮自在性
EMRで構築したHadoopクラスタは利用するEC2インスタンスの数を実行時に増減可能なため、ジョブに応じてコストの最適化を図ることができます。例えば特定のジョブのみ処理対象となるレコード数が多い場合に一時的にインスタンス数を増やして処理時間を短縮し、後続のジョブではそれ程インスタンス数が不要な場合は減らしてコストの最適化を図ることができます。
安全性
EMRによってHadoopクラスタは専用のSecurity Group内に構築されます。分散アプリケーション上で利用されるデータについてもEMRFSというEMRが提供するファイルシステムを利用することで透過的に暗号化・復号化が実施されます。S3の暗号化と併用することでデータを常に暗号化しながらアプリケーション側では透過的に利用することが可能です。
ユースケース
任意の分散アプリケーションを実行できるためユースケースは色々と考えられます。ここでは弊社ブログで紹介したユースケースについてご紹介します。
CloudFrontのアクセスログの集計と分析
CloudFrontのアクセスログを集計・分析したい! Hiveを利用してCloudFrontのログの集計と分析を行っています。前述のブログではsshでログインしてCLI上でHiveクエリを実行していますが、バッチジョブとして実行することも可能です。なお、Hadoopクラスタの起動をマネジメントコンソールから行っていますが、現在のマネジメントコンソールとは画面デザインが異なるためご注意下さい。
機械学習によるレコメンデーションエンジンの構築
EMR上でMahoutを使ってレコメンデーション Mahoutを利用して映画のレコメンデーションエンジンを作成しています。こちらもsshでログインしてMahoutのジョブを実行しています。なお、Hadoopクラスタの構築はAWS CLIで行っているので、そういう意味でも参考になるかと思います。
EMR上でZeppelinとSparkを使ってレコメンデーション こちらはSparkのMLlibを利用して同じく映画のレコメンデーションエンジンを作成しています。また、Sparkの操作はApache Zeppelin経由で行っており、Zeppelinのりようイメージが分かるかと思います。
あわせて読みたい
- AWS Black Belt Tech シリーズ 2015 - Amazon Elastic MapReduce
- 本エントリーでも度々引用していますが、日本語による最新情報が盛り込まれていますので一読をおすすめします。
- Amazon EMR のベストプラクティス | アマゾン ウェブ サービス(AWS 日本語)
- ベストプラクティスが載っています。なお、2013年8月のものなので若干現在の最新機能については取り込めていないですが、考え方という意味では変わっていません。
- AWSチーム社内勉強会「EMRおじさんに聞いてみよう」レポート | Developers.IO
- 弊社内でEMRに関する勉強会を行った際のQAをまとめたものです。そもそもHadoopとはという質問などについての回答が書かれています。
- (レポート) BDT303: Netflix ビックデータプラットフォーム上のSpark and Prestoの運用 #reinvent | Developers.IO
- NetflixのEMRのユースケースに関するレポートです。
- (レポート) BDT309: Amazon EMR上でデータサイエンスのためにApache Sparkを利用する際のベストプラクティス #reinvent | Developers.IO
- Sparkを利用する際のベストプラクティスに関するレポートです。スライドにはサイジングについて書かれているため、Sparkを本格的に利用されたい方は一読をおすすめします。
- Amazon Elastic MapReduceのリリースバージョンの差異 | Developers.IO
- 今年の7月にリリースされたEMR Release 4と従来のAMI Version 3系との違いについて書かれています。これから利用される方はEMR Release 4を利用すればいいかと思いますが、従来のAMI Version 3系に関する情報の方がネットで検索すると見つかるかと思いますので、違いを把握しておくことをおすすめします。
- EMR起動時に任意のソフトウェアを追加するには | Developers.IO
- Bootstrap Actionsを利用して任意のソフトウェアをHadoopクラスタに追加する方法について記述しています。予めEMRが提供してる分散アプリケーション以外のアプリケーションを利用したい際は参考になるかと思います。
さいごに
以上、『AWS サービス別 再入門アドベントカレンダー 2015』の8日目のエントリ『Amazon EMR編』でした。 EMRは任意の分散アプリケーションを実行できるという意味で自由度が大きいため他のAWSのサービスと比べると分かりにくいかもしれません。そのため、まずはHiveを利用してSQLで集計ができるというような部分から始めて行くのが分かりやすいのではないかと思います。
明日12/09(水)は森永のAWS Configです。お楽しみに!